System and method for low-density parity check (LDPC) code design

ABSTRACT

Disclosed is a density evolution algorithm based on a refined definition of node and edge densities for different parts of the code. In particular, density functions ƒ V   (1) (i) and ƒ V   (2) (i) of the output edges of the variable nodes with degree i within different codeword regions w 1  and w e , respectively, are defined and then calculated. Further, density functions ƒ C   (1) (j) and ƒ C   (2) (j) of the output edges for check nodes with degree j within codeword regions w 1  and w e , respectively, are defined and then calculated. Mixture density functions of output check edges connecting variable nodes in the first codeword region and the second codeword region are then calculated to determine an LDPC code design.

This application claims the benefit of U.S. Provisional Application No. 60/730,715 filed Oct. 27, 2005, which is incorporated herein by reference.

BACKGROUND OF THE INVENTION

The present invention relates generally to wireless communications, and more particularly to low-density parity check code design.

In wireless communications, a transmitter typically transmits information to a receiver over a communication channel. Statistically, a communication channel can be defined as a triple consisting of an input alphabet, an output alphabet, and for each pair (i,o) of input and output elements of each alphabet, a transition probability p(i,o). The transition probability is the probability that the receiver receives the symbol o given that the transmitter transmitted symbol i over the channel.

Given a communication channel, there exists a number, called the capacity of the channel, such that reliable transmission is possible for rates arbitrarily close to the capacity, and reliable transmission is not possible for rates above the capacity.

In some circumstances, the distance separating the transmitter (i.e., source) and the receiver (i.e., destination) is large. Alternatively or additionally, the communication channel over which the source and destination communicate may be poor quality. As a result, interference may be introduced in the communications between the source and the destination, which can result in distortion of the message.

To reduce the effect of interference, the transmitter and receiver often transmit information over a communication channel using a coding scheme. The coding scheme provides redundancy so that the message can be detected (and decoded) by the receiver in the presence of interference.

The coding scheme uses codes, which are an ensemble (i.e., group) of vectors that are to be transmitted by the transmitter. The length of the vectors are assumed to be the same and is referred to as the block length of the code. If the number of vectors is K=2^(k), then every vector can be described with k bits. If the length of the vectors is n, then in n times use of the channel k bits have been transmitted. The code then has a rate of k/n bits per channel use, or k/n bpc.

Low-density parity check (LDPC) codes are a class of linear block codes that often approach the capacity of conventional single user communication channels. The name comes from the characteristic of their parity-check matrix, which contains only a few 1's in comparison to the amount of 0's. LDPC codes may use linear time complex algorithms for decoding.

In more detail, LDPC codes are linear codes obtained from sparse bipartite graphs. FIG. 1 shows a graph 100 of an LDPC code. The graph 100 has n left nodes (i.e., x₁ to x₁₀) (called message nodes) and m right nodes (called check nodes). The graph 100 gives rise to a linear code of block length n and dimension at least n−m in the following way: the m coordinates of the codewords are associated with the n message nodes. The codewords are those vectors (c₁, . . . , c_(n)) such that, for all check nodes, the sum of the neighboring positions among the message nodes is zero.

Thus, a binary LDPC code is a linear block code with a sparse binary parity-check matrix. This m×n parity check matrix can be represented by a bipartite graph (e.g., as shown in FIG. 1) with n variable nodes corresponding to columns (bits in the codeword) and m check nodes corresponding to rows (parity check equations). A one in a certain row and column of the parity check matrix denotes an edge between the respective check and variable node in the graph, whereas a zero indicates the absence of an edge.

An LDPC code ensemble is characterized by its variable and check degree distributions (or profiles) λ=└λ₂ . . . λ_(d) _(v) ┘ and ρ=└ρ₂ . . . ρ_(d) _(c) ┘, respectively, where λ_(i)(ρ_(i)) denotes the fraction of edges connected to a variable (check) node of degree i, and d_(v)(d_(c)) is the maximum number of edges connected to any variable (check) node. An equivalent representation of LDPC code profiles can use generating functions

${{\lambda(x)} = {\sum\limits_{i = 2}^{d_{v}}{\lambda_{i}x^{i - 1}}}},{{\rho(x)} = {\sum\limits_{i = 2}^{d_{c}}{\rho_{i}{x^{i - 1}.}}}}$

The design rate of an ensemble can be given in terms of λ(x) and ρ(x) by

$R = {{1 - \frac{m}{n}} = {1 - \frac{\int_{0}^{1}{{\rho(x)}{\mathbb{d}x}}}{\int_{0}^{1}{{\lambda(x)}{\mathbb{d}x}}}}}$

Even while using a coding scheme, a destination may not be able to detect the transmitted message because of interference. In this case, a relay node, such as another transmitter or receiver, may be used in a system to relay the information transmitted by the source to the destination. For example, a relay can receive Y₁ and send out X₁ based on Y₁.

Some methods have been introduced for the purpose of performance prediction of code ensembles, such as density evolution (DE) and extrinsic-mutual-information-transfer (EXIT). The design of rate compatible LDPC codes employing the conventional density evolution algorithm, however, typically considers extra constraints on the code ensembles due to the specific structure of rate compatible codes.

LDPC codes are designed for half-duplex relay networks. While the structure of LDPC codes for half-duplex relay networks are in part similar to rate compatible code structures, current design methods based on Guassian approximation of density are typically not directly applicable to the problem of half-duplex relay channel code design because of a variation of receive signal to noise ratios (SNRs) in different sub-blocks of one codeword.

Therefore, there remains a need to design a LDPC code for a half-duplex relay channel that applies to the variation of SNRs in different sub-blocks of one codeword.

SUMMARY OF THE INVENTION

A density evolution algorithm is based on introducing a refined definition of node and edge densities for the different parts of a code in accordance with an embodiment of the present invention. In particular, density functions ƒ_(V) ⁽¹⁾(i) and ƒ_(V) ⁽²⁾(i) of the output edges of the variable nodes with degree i within different regions w₁ and w_(e), respectively, are defined. Further, density functions ƒ_(C) ⁽¹⁾(j) and ƒ_(C) ⁽²⁾(j) of the output edges for check nodes with degree j within codeword regions w₁ and w_(e), respectively, are defined.

In one embodiment, the extra constraint posed on these densities because of the structure of the half-duplex relay channel codes are considered. This set of constraints can introduce new relations between the four functions ƒ_(V) ⁽¹⁾(i), ƒ_(V) ⁽²⁾(i), ƒ_(C) ⁽¹⁾(j), and ƒ_(C) ⁽²⁾(j) that are in addition to the normal constraint on the density function based on the code rate.

The variable node density functions ƒ_(V) ⁽¹⁾(i) and ƒ_(V) ⁽²⁾(i) and the check node density functions ƒ_(C) ⁽¹⁾(j) and ƒ_(C) ⁽²⁾(j) within the first codeword region and the second codeword region are calculated. Mixture density functions of output check edges connecting variable nodes in the first codeword region and the second codeword region are calculated to determine an LDPC code design. If a signal to noise ratio (SNR) of the first codeword region is different than a SNR of the second codeword region, then ƒ_(V) ⁽¹⁾(i)≠ƒ_(V) ⁽²⁾(i) for each i and ƒ_(C) ⁽¹⁾(j)≠ƒ_(C) ⁽²⁾(j) for each j.

{λ_(i)}_(i), is denoted as the variable edge distribution and {ρ_(j)}_(j) is denoted as the check edge distribution of entire code w₂. m₀ ⁽¹⁾ and m₀ ⁽²⁾ are denoted as the output means from the channel detectors of w₁ and w_(e), respectively. N(m, 2m) is denoted as the probability density function (pdf) of a symmetric Gaussian distribution with the mean m and the variance 2m. m_(C) ⁽¹⁾=m_(C) ⁽²⁾=0 for all i.

The variable node density functions within w₁ and w_(e), respectively, are calculated by:

$\begin{matrix} {{f_{V}^{(1)}({\mathbb{i}})} = {N\left( {\underset{m_{V}^{(1)}{(i)}}{\underset{︸}{m_{0}^{(1)} + {\left( {{\mathbb{i}} - 1} \right)m_{C}^{(1)}}}},{2\left( {m_{0}^{(1)} + {\left( {{\mathbb{i}} - 1} \right)m_{C}^{(1)}}} \right)}} \right)}} \\ {= {N\left( {{m_{V}^{(1)}({\mathbb{i}})},{2\;{m_{V}^{(1)}({\mathbb{i}})}}} \right)}} \\ {{f_{V}^{(2)}({\mathbb{i}})} = {N\left( {\underset{m_{V}^{(2)}{(i)}}{\underset{︸}{m_{0}^{(2)} + {\left( {{\mathbb{i}} - 1} \right)m_{C}^{(2)}}}},{2\left( {m_{0}^{(2)} + {\left( {{\mathbb{i}} - 1} \right)m_{C}^{(2)}}} \right)}} \right)}} \\ {= {{N\left( {{m_{V}^{(2)}({\mathbb{i}})},{2\;{m_{V}^{(2)}({\mathbb{i}})}}} \right)}.}} \end{matrix}$ Further, the check node density functions are determined by calculating ƒ_(C) ⁽¹⁾(i)=N(m_(C) ⁽¹⁾(i), 2m_(C) ⁽¹⁾(i)) and ƒ_(C) ⁽²⁾(i)=N(m_(C) ⁽²⁾(i), 2m_(C) ⁽²⁾(i)), respectively, using

${m_{C}^{(1)}({\mathbb{i}})} = {\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(1)}{m_{V}^{(1)}({\mathbb{i}})}}} \right)} \right\rbrack^{d_{i,1} - 1}\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(2)}{m_{V}^{(2)}({\mathbb{i}})}}} \right)} \right\rbrack}^{d_{i,2}} \right)}$ and ${m_{C}^{(2)}({\mathbb{i}})} = {\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(1)}{m_{v}^{(1)}({\mathbb{i}})}}} \right)} \right\rbrack^{d_{i},1}\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(2)}{m_{v}^{(2)}({\mathbb{i}})}}} \right)} \right\rbrack}^{d_{i,2} - 1} \right)}$ where ψ(x)∫ {tanh(y/2)}p_(y)(y)dy with p_(y)(y)˜N(x,2x); d₁(i)=iP₁ and d₂(i)=i(1−P₁) with P₁ denoting the ratio of the number of variable nodes in w₁ over the number of variable nodes in the entire node w₂; {λ_(j) ⁽¹⁾}_(j) denotes the variable edge distribution of the code w₁; {λ_(j) ⁽²⁾}_(j) denotes the variable edge distribution of the code w_(e).

Mixture density functions of the output check edges connecting the variable nodes in w₁ and w_(e) are calculated as:

${f_{C}^{(l)} = {{\sum\limits_{i}{\rho_{i}{N\left( {{m_{C}^{(l)}({\mathbb{i}})},{2\;{m_{C}^{(l)}({\mathbb{i}})}}} \right)}}} = {N\left( {m_{C}^{(l)},{2\; m_{C}^{(l)}}} \right)}}},{l = {1,2}},$ where {ρ_(i)}_(i) denotes the overall edge distribution of the check nodes.

These and other advantages of the invention will be apparent to those of ordinary skill in the art by reference to the following detailed description and the accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 shows a graph of a low-density parity check (LDPC) code;

FIG. 2( a) shows full-duplex relay operations of a single relay system during a single time slot;

FIG. 2( b) shows half-duplex relay operations of a single relay system during two consecutive time slots;

FIG. 3 shows a one-dimensional channel model for the single relay system of FIG. 2( b);

FIG. 4( a) shows a two relay system operating in half-duplex relay mode during two consecutive time slots;

FIG. 4( b) shows a two-dimensional channel model for the multiple relay system of FIG. 4( a);

FIG. 5( a) is a block diagram of the relay protocol and a corresponding half-duplex relay code;

FIG. 5( b) is a block diagram of a half-duplex relay protocol and a corresponding coding strategy;

FIG. 6( a) is a block diagram of a rate-compatible structure of a parity-check matrix for half-duplex relay codes;

FIG. 6( b) shows a high level block diagram of a computer system which may be used in an embodiment of the invention;

FIG. 7( a) is a block diagram of a parity-check matrix in accordance with an embodiment of the invention;

FIG. 7( b) is a block diagram of a parity-check matrix that shows an increasing degree of variable nodes in accordance with an embodiment of the invention;

FIG. 7( c) is a block diagram of a parity-check matrix that shows a decreasing degree of variable nodes in accordance with an embodiment of the invention;

FIG. 8 is a table of overall edge distributions of the LDPC codes with different rates for additive white Gaussian noise (AWGN) channels in accordance with an embodiment of the invention;

FIG. 9 shows a table of node probability sets with different structures of parity-check matrices in accordance with an embodiment of the invention;

FIG. 10 is a block diagram of a decoding module for iterative decoding of LDPC codes in accordance with an embodiment of the invention;

FIG. 11 is a flowchart showing the steps performed by the processor to predict the ensemble performance of the half-duplex relay codes in accordance with an embodiment of the invention; and

FIG. 12 is a flowchart of an ensemble optimization procedure performed by the processor in accordance with an embodiment of the invention.

DETAILED DESCRIPTION

FIG. 2( a) shows full-duplex relay operations of a single relay system 200 during a single time slot. In particular, a source node, or source S, 204 communicates a message 206 to a destination node, or destination D, 208 during a time slot. The source 204 also communicates the message 210 to a relay node, or relay, 212. The relay 212 communicates the same message (shown with arrow 214) to the destination 208. Because the system 200 is a full-duplex relay system, the relay 212 can receive the message 210 from the source 204 and simultaneously transmit the message 214 to the destination 208. The source 204, relay 212, and destination 208 can be wireless terminals in a wireless network.

FIG. 2( b) shows half-duplex relay operations of a single relay system 220 during two consecutive time slots. Specifically, the left side of FIG. 2( b) shows the operations within the odd time slot and the right side of FIG. 2( b) shows the operation within the even time slot. During the odd time slot, the relay R 224 and the destination D 232 each receive signals from the source S 228. During the even time slot, the relay R 224 and the source S 228 each transmit signals to the destination D 232.

Denote x_(S) and x_(R) as the signals transmitted from S 228 and R 224, respectively. Further (and as shown in FIG. 2( b)), denote h_(SD), h_(SR), and h_(RD) as the path (i.e., channel) gains between {S, D}, {S, R} and {R, D}, respectively.

FIG. 3 shows a one-dimensional channel model 300 for the single relay system of FIG. 2( b). The distance 302 between S 304 and D 308 is normalized to unity. The distance between source S 304 and relay R 312 is denoted by d 316 and the distance between relay R 312 and the destination D 308 is 1−d 320. The channel gain depends on large scale path loss,

${{h_{SR}}^{2} = \frac{1}{d^{\alpha}}},{{h_{SD}}^{2} = 1},$ and

${{h_{RD}}^{2} = \frac{1}{\left( {1 - d} \right)^{\alpha}}},$ where α ε (2, 5) is the path loss exponent. The channel gains (h_(SR), h_(SD), and h_(RD)) may remain invariant over time. Then the received signal at the relay during each odd time slot can be written as: y _(R)(2t−1)=h _(SR) x _(S)(2t−1)+n _(R)(2t−1),   (1) and the received signals at the destination during two consecutive time slots are given by: y _(D)(2t−1)=h _(SD) x _(S)(2t−1)+n _(D)(2t−1),   (2) y _(D)(2t)=h _(SD) x _(S)(2t)+h _(RD) x _(R)(2t)+n _(D)(2t),   (3) where n_(R), n_(D)˜N (0, N₀) denote the additive white Gaussian noise (AWGN) at the relay and the destination, respectively. N₀ denotes the AWGN variance. N denotes Gaussian distribution, i.e., n_(R), n_(D)˜N (0, N₀) indicates that the noises n_(R) and n_(D) both follow the Gaussian distribution with zero mean and variance N₀.

FIG. 4( a) shows a two relay system 400 operating in half-duplex relay mode during two consecutive time slots. In particular, during an odd time slot, source S 404 transmits a signal to a first relay R₁ 408 and another signal to a second relay R₂ 412. The source S 404 also transmits a signal to the destination D 416. During an even time slot, source S 404 transmits a signal to the destination D 416 while each relay R₁ 408 and R₂ 412 transmits its signal to the destination D 416.

In a K-relay system, denote x_(R) ^((i)) as the signal transmitted from relay i (R_(i)), and h_(SR) ^((i)) and h_(RD) ^((i)) as the channel gains from R_(i) to S 404 and D 416, respectively, 1≦i≦K. Then the received signal at R_(i) is given by y _(R) ^((i))(2t−1)=h _(SR) ^((i)) x _(S)(2t−1)+n _(R)(2t−1), 1≦i≦K.   (4) The received signal at D 416 during the odd time slot is the same as equation (2) above, and that during the even time slot the received signal can be rewritten from equation (3) into:

$\begin{matrix} {{y_{D}\left( {2\; t} \right)} = {{h_{SD}{x_{S}\left( {2\; t} \right)}} + {\sum\limits_{i = 1}^{K}{h_{RD}^{(i)}{x_{R}^{(i)}\left( {2\; t} \right)}}} + {{n_{D}\left( {2\; t} \right)}.}}} & (5) \end{matrix}$

FIG. 4( b) shows the two-dimensional channel model for the multiple relay system 400 of FIG. 4( a). The model shows that the distance 402 between the source S 404 and the destination D 416 has been normalized to unity. The distance between the source S 404 and the first relay R₁ 408 is d₁ 420 and the distance between the source S 404 and the second relay R₂ 412 is d₂ 424.

Note that the position of each relay i depends on (d_(i), θ_(i)), where d_(i) is the distance between relay i and the source S 404, and θ_(i) is the corresponding angle between the relay i and the source S 404 (e.g., θ₁ is the angle between the source S 404 and the first relay R₁ 408, shown in FIG. 4( a)). The channel gains in the two-relay system shown in FIG. 4( a) can be written as |h_(SR) ^((i)|) ²=1/d_(i) ^(α),|h_(SD)|²=1, and |h_(RD) ^(i)|²=1/[(d_(i) sin (θ_(i)))²+(1−d_(i) cos (θ_(i)))²]^(α/2).

Relay Protocol for Half-Duplex Relay Systems

Relay protocols, which describe how to allocate space-time resources to achieve cooperative transmissions, are typically crucial for relay systems and the corresponding code design. In one embodiment, a code design for the half-duplex relay channel involves the design of two different sets of codebooks, one for the source (x_(S)(2t−1) and x_(S)(2t)) and the other for the relay (x_(R)(2t)), where t represents the time slot. In one embodiment, the coding and decoding strategy is performed over multiple blocks.

During the odd time slot, the source transmits a LPDC codeword w₁, i.e., x_(S)(2t−1)=√{square root over (P_(S,1))}w₁ where E{∥w₁∥²}=1. P_(S, 1) represents the transmit power of the source node during the time 2t−1. E{.} indicates the expectation operation. The two bars on each side of w₁ represent the norm of w₁. In the case that the destination cannot successfully decode w₁, the relay attempts to decode w₁ using equation (1) or (4) above. Then, the source and the relay cooperatively transmit some signals related to w₁ during the even time slot. Assuming perfect decoding at the relay, both the source and the relay transmit the same bits w_(e) during the even time slot, i.e., x _(S)(2t)=√{square root over (P _(S,2))}w _(e) and x _(R) ^((i))(2t)=√{square root over (P _(R) ^((i)))}w _(e), 1≦i≦K, where E{∥w _(e)∥²}=1. Then the received signals at the destination during the even time slot (i.e., equations (3) and (5)) can be rewritten as:

$\begin{matrix} \begin{matrix} {{y_{D}\left( {2\; t} \right)} = {{\underset{{\overset{\sim}{h}}_{SD}}{\underset{︸}{\left( {{h_{SD}\sqrt{P_{S,2}}} + {\sum\limits_{i}{h_{RD}^{(i)}\sqrt{P_{R}^{(i)}}}}} \right)}}{\underset{\_}{w}}_{e}} + {n_{D}\left( {2\; t} \right)}}} \\ {= {{{\overset{\sim}{h}}_{SD}{\underset{\_}{w}}_{e}} + {{n_{D}\left( {2\; t} \right)}.}}} \end{matrix} & (6) \end{matrix}$

FIG. 5( a) is a block diagram 500 of the relay protocol and the corresponding half-duplex relay code w₂ 504. w₂=[w₁, w_(e)], which is an extended LDPC code of the original codeword w₁. FIG. 5( b) is a block diagram 508 of the half-duplex relay protocol and the corresponding coding strategy. The coding strategy is as follows: h _(SD) =h _(SD)√{square root over (P _(S,1))}, h _(SD) =h _(SD)√{square root over (P _(S,2))}, h _(SR) =h _(SR)√{square root over (P _(S,1))} and h _(RD) =h _(RD)√{square root over (P _(R))}.

Source S 512 transmits codeword w₁ to destination D 516 and relay R 520. Source S 512 also transmits codeword w_(e) to the destination D 516. Relay R 520 also transmits codeword w_(e) to destination D 516. Successful decoding of w₁ may be achieved at the relay even when decoding fails at the destination because |h_(SR) ^((i))|²>|h_(SD)|² due to d_(i)<1, 1≦i≦K.

The code structure shown in FIG. 5( a) illustrates the rate-compatible property of the half-duplex relay code w₂. The design of w₂ can, therefore, be categorized into the scenario of the rate-compatible code design, i.e., to find the optimum codeword w₂=[w₁, w_(e)] as an extended codeword of the original codeword w₁ with extended bits w_(e).

FIG. 6( a) is a block diagram of a rate-compatible structure of the parity-check matrix 600 H₂ for half-duplex relay codes. The information of w₂ is carried in w₁, and w_(e) contains some additional parity-check bits. Consequently, the parity-check matrix H₂ 600 for the entire codeword w₂ contains the parity-check matrix for w₁, H₁ 604, as the non-zero sub-matrix in the top-left location, A 608 and B 612 as the non-zero sub-matrices in the bottom, and O 616 as the zero sub-matrix in the top-right location. M₁ represents the number of rows in the parity check matrix H₁, i.e., the number of the check nodes in code w₁; N₁ represents the number of columns in H₁, i.e., the number of variable nodes in code w₁ and also the length of code w₁. Similarly, M₂ represents the number of rows in the parity check matrix H₂, i.e., the number of the check nodes in code w₂; N₂ represents the number of columns in H₂, i.e., the number of variable nodes in code w₂ and also the length of code w₂.

Unlike typical rate-compatible LDPC code design, the received SNRs for w₁ and w_(e) are, in general, different according to the received signals at the destination (as described in equations (2) and (6) above). Specifically, the SNRs for the decoding of w₁ and w_(e) can be written, respectively, as:

$\begin{matrix} {{\gamma_{1} = \frac{{h_{SD}}^{2}P_{S,1}}{N_{0}}},{and}} & (7) \\ {{\gamma_{2} = \frac{\left( {{h_{SD}\sqrt{P_{S,2}}} + {\sum\limits_{i}{h_{RD}^{(i)}\sqrt{P_{R}^{(i)}}}}} \right)^{2}}{N_{0}}},} & (8) \end{matrix}$ where the transmit power constraint is given by

${P_{S,1} + P_{S,2} + {\sum\limits_{i = 1}^{K}P_{R}^{(i)}}} \leq P_{T}$ with a maximum overall transmit power denoted by P_(T).

Thus, the half-duplex relay code design problem can be reformulated as the design of the rate-compatible LDPC code w₂ for a given original LDPC code w₁, where the received SNRs are γ₁ and γ₂ for w₁ and w_(e), respectively.

The half-duplex relay code optimization algorithm is described below under a given power allocation set, where R₂<R₁ (i.e., the rate of the second codeword is greater than the rate of the first codeword).

Code Ensemble for Half-Duplex Relay LDPC Codes

A parity-check matrix describes the corresponding LDPC codeword. The code ensemble (i.e., edge distribution or node perspective) can be used to statistically characterize a set of codewords with different parity-check matrices which share the same edge distribution, and thus, approximately have the same performance. In the above ensemble analysis, the SNR within one entire codeword is the same or the averaged SNRs within different regions of one codeword are statistically the same (e.g., which can be applied in block-fading or fast-fading channels).

A half-duplex relay codeword typically experiences different received SNRs within different regions, e.g., γ₁≠γ₂ for w₁ and w_(e) as indicated by equations (7) and (8) above. The overall edge distribution is often too rough for the existing ensemble analysis methods to evaluate a half-duplex relay codeword.

The following description describes the present invention in terms of the processing steps required to implement an embodiment of the invention. These steps may be performed by an appropriately programmed computer, the configuration of which is well known in the art. An appropriate computer may be implemented, for example, using well known computer processors, memory units, storage devices, computer software, and other nodes. A high level block diagram of such a computer is shown in FIG. 6( b). Computer 650 contains a processor 654 which controls the overall operation of computer 650 by executing computer program instructions which define such operation. The computer program instructions may be stored in a storage device 658 (e.g., magnetic disk) and loaded into memory 662 when execution of the computer program instructions is desired. Computer 650 also includes one or more interfaces 665 for communicating with other devices (e.g., locally or via a network). Computer 650 also includes input/output 674 which represents devices which allow for user interaction with the computer 650 (e.g., display, keyboard, mouse, speakers, buttons, etc.). The computer 650 may represent a relay, source, or destination as described above.

One skilled in the art will recognize that an implementation of an actual computer will contain other elements as well, and that FIG. 6( b) is a high level representation of some of the elements of such a computer for illustrative purposes. In addition, one skilled in the art will recognize that the processing steps described herein may also be implemented using dedicated hardware, the circuitry of which is configured specifically for implementing such processing steps. Alternatively, the processing steps may be implemented using various combinations of hardware and software. Also, the processing steps may take place in a computer or may be part of a larger machine.

In accordance with an embodiment of the present invention, let D_(V) ^((k)) and D_(C) ^((k)) be the maximum degrees of the variable nodes and the check nodes, respectively, for the code w_(k), k=1 and 2. Denote {λ_(i,k)}_(i=1) ^(D) ^(V) ^((k)) and {ρ_(i,k)}_(i=1) ^(D) ^(C) ^((k)) as the variable edge distribution and the check edge distribution, respectively. Further, denote {α_(i,k)}_(i=1) ^(D) ^(V) ^((k)) and {b_(i,k)}_(i=1) ^(D) ^(C) ^((k)) as the variable node perspective and the check node perspective, respectively. Suppose that one half-duplex relay codeword experiences two different SNRs within two regions as FIG. 6( a) shows (γ₁≠γ₂). For the code w₂, the following new ensemble definitions apply.

Define π₁(i) as the probability of a variable node which has a degree of i and falls in the region of w₁ (i.e., H1 and A), namely region-1. Consequently, π₂(i)=1−π₁(i) denotes the probability of the node falling in the region of w_(e) (i.e., B and O), namely, region-2. The probability set {π₁(i),π₂(i)}_(i=2) ^(D) ^(V) ⁽²⁾ may satisfy the following constraint:

$\begin{matrix} {{{{\sum\limits_{i = 1}^{D_{v}^{(2)}}{{\pi_{1}(i)}a_{i,2}}} = {{\frac{R_{2}}{R_{1}}\mspace{14mu}{or}\mspace{14mu}{\sum\limits_{i = 1}^{D_{v}^{(2)}}{{\pi_{2}(i)}a_{i,2}}}} = {1 - \frac{R_{2}}{R_{1}}}}},}\mspace{11mu}} & (9) \end{matrix}$ where R_(i) denotes the rate of w₁, I=1, 2. The edge distribution is then defined within region-I, I=1 and 2, as {λ_(i,2) ^((ι)), ι=1, 2}_(i=1) ^(D) ^(V) ⁽²⁾ where

$\begin{matrix} {{\lambda_{i,2}^{(l)} = \frac{{\pi_{l}(i)}\lambda_{i,2}}{\sum\limits_{j = 1}^{D_{v}^{(2)}}{{\pi_{l}(j)}\lambda_{j,2}}}},{I = 1},2.} & (10) \end{matrix}$ The code ensemble of w₂ {{λ_(i,2) ⁽¹⁾,λ_(i,2) ⁽²⁾}_(i=2) ^(D) ^(V) ⁽²⁾ ,{ρ_(j,2)}_(j=2) ^(D) ^(C) ⁽²⁾ } depends on the overall code ensemble {{λ_(i,2)}_(i), {ρ_(j,2)}_(j)} and the node probability set {π₁(i),π₂(i)}_(i=2) ^(D) ^(V) ⁽²⁾ . Then, for each overall code ensemble {{λ_(i,2)}_(i),{ρ_(j,2)}_(j)}, there may be a number of possible new code ensembles {{λ_(i,2) ⁽¹⁾,λ_(i,2) ⁽²⁾}_(i),{ρ_(i,2)}_(j)}, each of which can be determined by one node probability set {π₁(i),π₂(i)}_(i). The code ensemble described in equation (10) describes the parity-check matrix of w₂ such that the edge distributions within region-1 and region-2 can be characterized separately. The half-duplex relay codewords with the same overall code ensemble {{λ_(i,2)}_(i),{ρ_(j,2)}_(j)} but different probability set {π₁(i),π₂(i)}_(i) typically have different performances.

In one embodiment, the probability of a check node with a certain degree may fall within different non-zero sub-matrices H₁, A, and B, which may present a more detailed description of H₂. Note that {{λ_(i,2) ⁽¹⁾,λ_(i,2) ⁽²⁾}_(i),{ρ_(j,2)}_(j)} can offer a more refined description of w₂ than {{λ_(i,2)}_(i),{ρ_(j,2)}_(j)}.

The following are examples to clarify the definition described in equation (10) above. Given each overall edge distribution, the node probability set may satisfy equation (9) in three different manners so that three different code ensembles can be obtained using equation (10). FIG. 7( a) is a block diagram of a parity-check matrix 704 that shows a proportional node distribution for each degree. FIG. 7( b) is a block diagram of a parity-check matrix 708 that shows an increasing degree of variable nodes. FIG. 7( c) is a block diagram of a parity-check matrix 712 that shows a decreasing degree of variable nodes.

Specifically, FIG. 7( a) shows the first manner of the node probability setting:

$\begin{matrix} {{{\pi_{1}(i)} = \frac{R_{2}}{R_{1}}},{1 \leq i \leq D_{v}^{(2)}},} & (11) \end{matrix}$ where the nodes with each degree are arranged proportionally in region-1 N₁ 706 and region-2 N₂ 707. FIG. 7( b) shows the second manner of the node probability setting:

$\begin{matrix} \left\{ \begin{matrix} {{{\pi_{1}(i)} = 1},} & {{1 \leq i \leq K},} \\ {{{\pi_{1}(i)} = \frac{{R_{2}/R_{1}} - {\sum\limits_{j = 1}^{i - 1}\; a_{j,2}}}{a_{i,2}}},} & {i = {K + 1}} \\ {{{\pi_{1}(i)} = 0},} & {{{K + 2} \leq i \leq D_{v}^{(2)}},} \end{matrix} \right. & (12) \end{matrix}$ where the variable nodes in the parity-check matrix 708 is arranged from left to right in a non-decreasing degree order. FIG. 7( c) shows the third manner of the node probability setting:

$\begin{matrix} \left\{ \begin{matrix} {{{\pi_{1}(i)} = 0},} & {{1 \leq i \leq L},} \\ {{{\pi_{1}(i)} = \frac{{R_{2}/R_{1}} - {\sum\limits_{j = {i + 1}}^{D_{V}^{(2)}}a_{j,2}}}{a_{{L + 1},2}}},} & {i = {L + 1}} \\ {{{\pi_{1}(i)} = 1},} & {{{L + 2} \leq i \leq D_{v}^{(2)}},} \end{matrix} \right. & (13) \end{matrix}$ where the variable nodes in the parity-check matrix 712 are arranged from left to right in a non-increasing degree order.

FIG. 8 shows a table 800 of overall edge distributions 804 {{λ_(i,2)}_(i,){ρ_(j,2)}_(j)} of the LDPC codes with different rates for AWGN channels. In one embodiment, code-1 808˜code-4 812 with 1/2 rate. Code-5 816˜code-8 820 with 1/4 rate.

FIG. 9 shows a table 900 of node probability sets with different structures of parity-check matrices. In particular, table 900 shows {π₁(i)}_(i) corresponding to the three parity-check matrix structures shown in FIGS. 7( a), 7(b), and 7(c) for each of the overall edge distributions in FIG. 8.

Ensemble Performance Analysis for Half-Duplex Relay Codes

Because γ₁≠γ₂ in w₂ in the half-duplex relay scenario, common methods like density evolution or EXIT chart based on Gaussian approximation are typically not accurate in performance prediction based on the overall edge distribution {{λ_(i,2)}_(i,){ρ_(j,2)}_(j)}. An iterative approach performed by the processor 654 to evaluate the half-duplex relay code based on the code ensemble {{λ_(i,2) ⁽¹⁾,λ_(i,2) ⁽²⁾}_(i){ρ_(j,2)}_(j)} is described below. A difference between this approach and the conventional density evolution approaches is that, instead of assuming equal density function for the entire codeword, different density functions are treated differently for the two different region-I, I=1, 2.

Variable Node Decoding Process

FIG. 10 is a block diagram of an embodiment of a decoding module 1000 for iterative decoding of LDPC codes over AWGN channels. The decoding module 1000 includes a variable node decoder (VND) 1004 and a check node decoder (CND) 1008. The VND 1004 is a decoder of repetition codes. The VND 1004 receives input from a channel 1012 and produces output 1016. Output 1016 generates a hard decision 1020. Output 1016 is also provided as input into a summing block 1024 and then to an edge de-interleaver 1028. The edge interleaver 1028 is an interleaver represented by the edges connecting the variable nodes and check nodes. For example, there are ten edges coming out of the check nodes, and these edges can be ordered as “1, 2 . . . 10”. The edge interleaver changes the orders of these edges according to a random pattern. After interleaving, the edges' order are changed to “10, 5, 2 . . . 1”. The edge de-interleaver performs the inverse operation so that the edges' orders are restored to the original ones “1, 2 . . . , 10”. The output of the edge de-interleaver 1028 is transmitted to the CND 1008. The CND 1008 is a decoder of single parity-check codes.

The output of the edge de-interleaver 1028 is also transmitted to another summing module 1032. The output of the edge de-interleaver 1028 is subtracted from the output of the CND 1008 by the summing module 1032. The output of the summing module 1032 is then input into an edge interleaver 1036. The output of the edge interleaver 1036 is transmitted to the summing module 1024 (for subtraction) and to the VND 1004 as feedback. In one embodiment, the computer described above performs one or more of the functions of the decoding module 1000.

In more detail of the variable node decoding process, the VND output log-likelihood ratio (LLR) corresponding to a node with degree i is, in general, given by:

${{L_{E,V}(i)} = {L_{0} + {\sum\limits_{j \neq i}^{\;}\;{L_{A,V}(j)}}}},$ where L₀˜N(m₀,σ₀ ²) denotes the VND input LLR coming from channel, m₀ is the mean (the mean m₀=2γ₀ depends on the received SNR γ₀ over the AWGN channel), σ₀ ² is the channel noise variance. L_(E,V) represents the extrinsic log-likelihood ratio (LLR) of the variable node output. L_(A,V) represents the extrinsic LLR of the variable node input. L_(E,V)(i) in region-1 and region-2 are different because γ₁≠γ₂, as shown above in equations (7) and (8). The quantities with superscript (I) are denoted as those for region-I, I=1, 2. In particular, the VND output LLRs of a node with degree i for region-1 and region-2 are given, respectively, by

$\begin{matrix} {{L_{E,V}^{(1)}(i)} = {{L_{0}^{(1)} + {\sum\limits_{j \neq i}^{\;}\;{{L_{A,V}^{(1)}(j)}\mspace{14mu}{and}\mspace{14mu}{L_{E,V}^{(2)}(i)}}}} = {L_{0}^{(2)} + {\sum\limits_{j \neq i}^{\;}\;{L_{A,V}(j)}}}}} & (14) \end{matrix}$ where L₀ ⁽¹⁾˜N(m₀ ⁽¹⁾,σ₀ ⁽¹⁾) denotes the detector output of equation (2) and L₀ ⁽²⁾˜N(m₀ ⁽²⁾,σ₀ ⁽²⁾) denotes the detector output of equation (6). m₀ ⁽¹⁾=2γ₁ and m₀ ⁽²⁾=2γ₂; L_(A,V) ^((ι))(j) are identically independently distributed symmetric Gaussian random variables, i.e., L_(A,V) ^((ι))(j)˜N(m_(C) ^((ι)),2m_(C) ^((ι))), I=1, 2. Then, L_(E,V) ^((ι))(i), ι=1, 2 can be well approximated by a symmetric Gaussian random variable, i.e.,

$\begin{matrix} {{{L_{E,V}^{(l)}(i)} \sim {N\left( {\underset{\underset{m_{V}^{(l)}{(i)}}{︸}}{m_{0}^{l} + {\left( {i - 1} \right)m_{C}^{(l)}}},{2\left( {m_{0}^{(l)},{{+ \left( {i - 1} \right)}m_{C}^{(l)}}} \right)}} \right)}} = {{N\left( {{m_{V}^{(l)}(i)},{2{m_{V}^{(l)}(i)}}} \right)}.}} & (15) \end{matrix}$ Thus, the averaged VND output LLR per edge has the Gaussian mixture density function:

$\begin{matrix} {{f_{v}^{(l)} = {{\sum\limits_{i}^{\;}{\lambda_{i}^{(l)}{N\left( {{m_{v}^{(l)}(i)},{2{m_{v}^{(l)}(i)}}} \right)}}} = {N\left( {m_{v}^{(l)},{2m_{v}^{(l)}}} \right)}}},{1 = 1},2,} & (16) \end{matrix}$ where {λ_(i) ^((ι))}_(i) denotes the variable edge distribution in region-I defined above. Check Node Decoding Process

The CND output LLR of a node with degree i is, in general, given by

$\begin{matrix} {{{L_{E,C}(i)} = {2\;\arg\;{\tanh\left( {\prod\limits_{j \neq i}\;{\tanh\left( \frac{L_{A,{C{(j)}}}}{2} \right)}} \right)}}},} & (17) \end{matrix}$ where L_(A,C)(j) denotes the CND input LLRs coming from the VND output edges given by equation (14) above. The following equation results from taking expectation over each side of equation (17):

$\begin{matrix} {{E\left\{ {\tanh\left( \frac{L_{E,C}(i)}{2} \right)} \right\}} = {E\left\{ {\prod\limits_{j \neq i}\;{\tanh\left( \frac{L_{A,C}(j)}{2} \right)}} \right\}}} \\ {= {\prod\limits_{j \neq i}\;{E\left\{ {\tanh\left( \frac{L_{A,C}(j)}{2} \right)} \right\}}}} \end{matrix}$ where the second equality follows the fact that L_(A,C) (j) is independently distributed. It should be noted that L_(E,C)(j) in region-1 and region-2 also have different density functions because ƒ_(V) ⁽¹⁾≠ƒ_(V) ⁽²⁾ as revealed in equations (15) and (16) above. Then, the CND output LLRs in region-1 satisfy the equation below:

$\begin{matrix} {{E\left\{ {\tanh\left( \frac{L_{E,C}^{(1)}(i)}{2} \right)} \right\}} = {\prod\limits_{k \neq i}\;{E\left\{ {\tanh\left( \frac{L_{A,C}^{(1)}(k)}{2} \right)} \right\}{\prod\limits_{l}\;{E\left\{ {\tanh\left( \frac{L_{A,C}^{(2)}(l)}{2} \right)} \right\}}}}}} \\ {= {E\left\{ {\tanh\left( \frac{L_{A,C}^{(1)}(k)}{2} \right)} \right\}^{d_{i,1} - 1}E\left\{ {\tanh\left( \frac{L_{A,C}^{(2)}(l)}{2} \right)} \right\}^{d_{i,2}}}} \end{matrix}$ i.e., ψ(m_(C)⁽¹⁾(i)) = [ψ(m_(V)⁽¹⁾)]^(d_(i, 1) − 1)[ψ(m_(V)⁽²⁾)]^(d_(i, 2)) where ψ(x)ΔE{ tanh(y/2)} with y˜N(x,2x). The second equality comes from the fact that L_(A,C) ^((ι))(j) are within region-I; d_(i,ι,) I=1, 2, denotes the number of CND input edges coming from region-I, which is defined as

$d_{i,l} = {{{iP}_{l}\mspace{14mu}{with}\mspace{14mu} P_{l}}\overset{\Delta}{=}\frac{{ia}_{i}{\pi_{l}(i)}}{\sum\limits_{j = 2}^{D_{V}}\;{ja}_{j}}}$ denoting the proportion of the number of edges falling within region-I. Furthermore, using the mixture Gaussian density function in equation (16), the mean of CND output LLRs in region-1 is given by:

$\begin{matrix} {{m_{C}^{(1)}(i)} = {{\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}\;{\lambda_{j}^{(1)}{m_{V}^{(1)}(i)}}} \right)} \right\rbrack^{d_{i,1} - 1}\left\lbrack {\psi\left( {\sum\limits_{j}\;{\lambda_{j}^{(2)}{m_{V}^{(2)}(i)}}} \right)} \right\rbrack}^{d_{i,2}} \right)}.}} & (18) \end{matrix}$ Similarly, the mean of the CND output LLRs within region-2 can then be written as:

$\begin{matrix} {{m_{C}^{(2)}(i)} = {{\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}\;{\lambda_{j}^{(1)}{m_{v}^{(1)}(i)}}} \right)} \right\rbrack^{d_{i},1}\left\lbrack {\psi\left( {\sum\limits_{j}\;{\lambda_{j}^{(2)}{m_{v}^{(2)}(i)}}} \right)} \right\rbrack}^{d_{i,2} - 1} \right)}.}} & (19) \end{matrix}$ Using equations (18) and (19) above, the mixture Gaussian density functions of CND outputs are given by

$\begin{matrix} {{f_{C}^{(l)} = {{\sum\limits_{i}\;{\rho_{i}{N\left( {{m_{C}^{(l)}(i)},{2{m_{C}^{(l)}(i)}}} \right)}}} = {N\left( {m_{C}^{(l)},{2m_{C}^{(l)}}} \right)}}},{l = 1},2,} & (20) \end{matrix}$ where {ρ_(i)}_(i) denotes the overall edge distribution of the check nodes. Iterative Algorithm for Ensemble Performance Prediction

FIG. 11 is a flowchart showing the steps performed by the processor to predict the ensemble performance of the half-duplex relay codes. The mean of CND output LLRs is set in region-I to zero, where I equals 1 and 2 in step 1104. The density functions of VND output LLRs (i.e., m_(V) ^(ι)(i)) are then calculated (e.g., using equation (15)) in step 1108. The density functions of CND output LLRs (i.e., m_(C) ^((ι))(i)) are then calculated (e.g., using equations (18) and (19)) in step 1112. The mixture density function of CND outputs (i.e., m_(C) ^((ι))) are then calculated (e.g., using equation (20)) in step 1116. The processor then determines, in step 1120, whether a predefined maximum iteration number has been reached. If so, the iteration is stopped in step 1124. If not, then the process returns to step 1108 and repeats.

Optimization of Half-Duplex Relay Code Ensemble

FIG. 12 is a flowchart of an ensemble optimization procedure that the processor can perform. The processor first performs an initialization step in step 1204. In particular, given the original LDPC code with a rate of R₁ and an ensemble of {{λ_(i,1)}_(i=1) ^(D) ^(V) ^((ι)) ,{ρ_(j,1)}_(j) ^(D) ^(C) ^((ι)) }, the processor generates N half-duplex relay codes, each of which has a rate of R₂ and an ensemble of C(n)={{λ_(i,2) ⁽¹⁾(n),λ_(i,2) ⁽²⁾(n)}_(i=1) ^(D) ^(V) ⁽²⁾ ,{ρ_(j,2)(n)}_(j=1) ^(D) ^(C) ⁽²⁾ }, n=1, 2, . . . , N. A code ensemble evaluation is then performed in step 1208. In particular, each code ensemble C(n) is then evaluated (e.g., using the steps of FIG. 11), where 1≦n≦N. The optimum code ensemble C*=arg max_(1≦i≦N)m_(dec)(n) is then found, where C*={{λ*_(i,2),λ*_(i,2)}_(i=1) ^(D) ^(V) ⁽²⁾ ,{ρ*_(j,2)}_(j=1) ^(D) ^(C) ⁽²⁾ }, and m_(dec)(n) is the mean of the decoder output for C(n). Code ensemble updating is then performed in step 1212. In particular, Ñ code ensembles are randomly chosen out of {C(n)}_(n=1) ^(N), which are denoted by {tilde over (C)}(k)={{{tilde over (λ)}_(i,2)(k),{tilde over (λ)}_(i,2)(k)}_(i=1) ^(D) ^(V) ⁽²⁾ ,{{tilde over (ρ)}_(j,2)(k)}_(j=1) ^(D) ^(C) ⁽²⁾ }, k=1, 2, . . . ,Ñ. The n-th code ensemble is then updated by

${{C(n)} = {C^{*} + {\alpha{\sum\limits_{k = 1}^{\overset{\sim}{N}}\;{\left( {- 1} \right)^{k - 1}{\overset{\sim}{C}(k)}}}}}},$ where α<1 is the step size. In one embodiment, this step is repeated to update all code ensembles C(n), 1≦i≦N.

The processor then determines, in step 1216, whether the iteration number exceeds a predefined maximum iteration number. If so, the process is stopped in step 1220. If not, then the processor returns the process to step 1208 and repeats the process.

In one embodiment, in step 1204, to generate the half-duplex relay code ensembles using the original LDPC code ensemble, the processor analyzes some additional rate-compatible constraints. For example, the overall edge distribution and the corresponding overall node perspective of w₂, {λ_(i,2),a_(i,2)}_(i=1) ^(D) ^(V) ⁽²⁾ and {ρ_(j,2),b_(j,2)}_(j=1) ^(D) ^(C) ⁽²⁾ , may satisfy the constraints below:

$\begin{matrix} \left\{ \begin{matrix} {{\lambda_{2,2} = {1 - {\sum\limits_{j = 3}^{D_{V}^{(2)}}\;\lambda_{j,2}}}},{{{and}\mspace{14mu}\rho_{2,2}} = {1 - {\sum\limits_{j = 3}^{D_{C}^{(2)}}\;\rho_{j,2}}}}} \\ {{\lambda_{D_{V}^{(2)},2} = \frac{{{\frac{R_{2}}{2}{\sum\limits_{j = 3}^{D_{C}^{(2)}}\;\left( {\frac{1}{j} - \frac{1}{2}} \right)}} - {\left( {1 - R_{2}} \right){\sum\limits_{j = 3}^{D_{V}^{(2)} - 1}\;\left( {\frac{1}{j} - \frac{1}{2}} \right)}}},}{\left( {1 - R_{2}} \right)\left( {\frac{1}{D_{V}^{(2)}} - \frac{1}{2}} \right)}},} \\ {a_{i,2} = \frac{\frac{\lambda_{i,2}}{i}}{{\sum\limits_{j = 2}^{D_{V}^{(2)}}\;{\frac{\lambda_{j,2}}{j}\mspace{14mu}{and}\mspace{20mu} b_{i,2}}} = {\frac{\frac{\rho_{i,2}}{i}}{\sum\limits_{j = 2}^{D_{C}^{(2)}}\;\frac{\rho_{j,2}}{j}}.}}} \end{matrix} \right. & (21) \end{matrix}$

Referring again to the parity-check matrix H₂ of FIG. 4, since O is an all-zero sub-matrix, the overall check node perspective {b_(i,2)}_(i=1) ^(D) ^(C) ⁽²⁾ corresponding to H₂ and the overall check node perspective {b_(i,1)}_(i=1) ^(D) ^(C) ⁽¹⁾ corresponding to H₁ should satisfy the constraints b_(i,2)M₂≧b_(i,1)M₁, i=2, 3, . . . , D_(C) ⁽¹⁾, i.e.,

$\begin{matrix} {{{b_{i,2} \geq {\frac{M_{1}}{M_{2}}b_{i,1}}} = {{\frac{\left( {1 - R_{1}} \right)N_{1}}{\left( {1 - R_{2}} \right)N_{2}}b_{i,1}} = {\frac{\left( {1 - R_{1}} \right)R_{2}}{\underset{\underset{\Gamma}{︸}}{\left( {1 - R_{2}} \right)R_{1}}}b_{i,1}}}},{i = 2},3,\ldots\mspace{11mu},D_{C}^{(1)}} & (22) \end{matrix}$ where the first equality follows the fact

${1 - R_{i}} = \frac{M_{i}}{N_{i}}$ and the second equality comes from the inherent rate-compatible property, R₁N₁=N₁−M₁=N₂−M₂=R₂N₂. Then, using equation (21), the node perspective constraints can be equivalently transformed into the corresponding edge distribution constraints

$\begin{matrix} {{{\frac{\rho_{i,2}/i}{\sum\limits_{j = 2}^{D_{C}^{(2)}}\rho_{j,{2/j}}} \geq {\Gamma\; b_{i,1,}i}} = 2},3,{\ldots\mspace{11mu} D_{C}^{(1)}},{i.e.},{{\frac{\rho_{i,2}}{i} \geq {\Gamma\; b_{i,1}{\sum\limits_{j = 2}^{D_{C}^{(2)}}\frac{\rho_{j,2}}{j}}}} = {\Gamma\;{b_{i,1}\left\lbrack {\frac{1}{2} + {\sum\limits_{j = 3}^{D_{C}^{(2)}}{\rho_{j,2}\left( {\frac{1}{j} - \frac{1}{2}} \right)}}} \right\rbrack}}},{i = 2},3,4,\ldots\mspace{11mu},{D_{C}^{(1)}.}} & (23) \end{matrix}$ For the case of i=2 in equation (23), using

$\rho_{2,2} = {1 - {\sum\limits_{j = 3}^{D_{C}^{(2)}}\rho_{j,2}}}$ in equation (21), results in:

$\begin{matrix} {{\frac{\rho_{2,2}}{2} = {\frac{1 - {\sum\limits_{j = 3}^{D_{C}^{(2)}}\rho_{j,2}}}{2} \geq {\frac{\Gamma\; b_{2,1}}{2} + {\Gamma\;{b_{2,1}\left\lbrack {\sum\limits_{j = 3}^{D_{C}^{(2)}}{\rho_{j,2}\left( {\frac{1}{j} - \frac{1}{2}} \right)}} \right\rbrack}}}}},{i.e.},{\frac{1 - {\Gamma\; b_{2,1}}}{2} \geq {{\sum\limits_{j = 3}^{D_{C}^{(2)}}\frac{\rho_{j,2}}{2}} + {\Gamma\;{{b_{2,1}\left\lbrack {\sum\limits_{j = 3}^{D_{C}^{(2)}}{\rho_{j,2}\left( {\frac{1}{j} - \frac{1}{2}} \right)}} \right\rbrack}.}}}}} & (24) \end{matrix}$ Further, the overall variable node perspective {a_(i,2)}_(i=1) ^(D) ^(V) ⁽²⁾ corresponding to H₂ and {a_(i,1)}_(i=1) ^(D) ^(V) ⁽¹⁾ corresponding to H₁ satisfy the constraints

${{\sum\limits_{k = l}^{D_{V}^{(2)}}{a_{k,2}N_{2}}} \geq {\sum\limits_{k = l}^{D_{V}^{(1)}}{a_{k,1}N_{1}}}},$

$\begin{matrix} {{i.e.},{{{\sum\limits_{k = l}^{D_{V}^{(2)}}a_{k,2}} \geq {\frac{N_{1}}{N_{2}}{\sum\limits_{k = l}^{D_{V}^{(1)}}a_{k,1}}}} = {\underset{\underset{V}{︸}}{\frac{R_{2}}{R_{1}}}{\sum\limits_{k = l}^{D_{V}^{(2)}}a_{k,1}}}},{l = 2},3,\ldots\mspace{11mu},D_{V}^{(1)},} & (25) \end{matrix}$ Then, using equation (21), the variable node constraints of equation (25) can be equivalently transformed into the variable edge distribution constraints

$\begin{matrix} {{{{\sum\limits_{k = l}^{D_{V}^{(2)}}\frac{\lambda_{k,2}/k}{\sum\limits_{j = 1}^{D_{V}^{(2)}}\lambda_{j,{2/j}}}} \geq {Y{\sum\limits_{k = l}^{D_{V}^{(1)}}{a_{k,1,}l}}}} = 2},3,{\ldots\mspace{11mu} D_{V}^{(1)}},{i. e.},{{{\sum\limits_{k = l}^{D_{V}^{(2)}}\frac{\lambda_{k,2}}{k}} \geq {\left( {Y{\sum\limits_{k = l}^{D_{V}^{(1)}}a_{k,1}}} \right)\left( {\sum\limits_{k = l}^{D_{V}^{(2)}}\frac{\lambda_{k,2}}{k}} \right)}} = {\left( {Y{\sum\limits_{k = l}^{D_{V}^{(2)}}a_{k,1}}} \right)\left( \frac{\sum\limits_{k = 2}^{D_{C}^{(2)}}\frac{\rho_{k,2}}{k}}{1 - R_{2}} \right)}},{i. e.},{{\sum\limits_{k = l}^{D_{V}^{(2)}}\frac{\lambda_{k,2}}{k}} \geq {\left( {Y{\sum\limits_{k = l}^{D_{V}^{(1)}}a_{k,1}}} \right)\left( \frac{\frac{1}{2} + {\sum\limits_{k = 3}^{D_{C}^{(2)}}{\rho_{k,2}\left( {\frac{1}{k} - \frac{1}{2}} \right)}}}{1 - R_{2}} \right)}}} & (26) \end{matrix}$ Thus, in the initialization step (step 1204) of FIG. 12, the constraints for generating half-duplex relay code ensembles based on the given code ensemble of w₁ can be written as shown in equations (23), (24), and (26). In the code ensemble evaluation step (i.e., step 1208 of FIG. 12), the algorithm described in FIG. 11 is employed to predict the performance of each half-duplex relay code ensemble C(n)={{λ_(i,2) ⁽¹⁾(n),λ_(i,2) ⁽²⁾(n)}_(i=2) ^(D) ^(V) ⁽²⁾ ,{ρ_(i,2)(n)}_(i=2) ^(D) ^(C) ⁽²⁾ }. Hence, {λ_(i,2) ⁽¹⁾(n),λ_(i,2) ⁽²⁾(n)}_(i=2) ^(D) ^(V) ⁽²⁾ is needed for the given overall code ensemble {{λ_(i,2)}_(i),{ρ_(j,2)}_(j)}. As described above for a given overall edge distribution {λ_(i,2),ρ_(j,2)}_(i,j), the edge distribution {λ_(i,2) ⁽¹⁾(n),λ_(i,2) ⁽²⁾(n)}_(i=2) ^(D) ^(V) ⁽²⁾ defined in equation (10) depends on the node probability set {π₁(i),π₂(i)}_(i), which is not unique and corresponds to a specific structure of the parity-check matrix.

The foregoing Detailed Description is to be understood as being in every respect illustrative and exemplary, but not restrictive, and the scope of the invention disclosed herein is not to be determined from the Detailed Description, but rather from the claims as interpreted according to the full breadth permitted by the patent laws. It is to be understood that the embodiments shown and described herein are only illustrative of the principles of the present invention and that various modifications may be implemented by those skilled in the art without departing from the scope and spirit of the invention. Those skilled in the art could implement various other feature combinations without departing from the scope and spirit of the invention. 

1. A system for determining a low-density parity check (LDPC) code design for a half-duplex relay channel comprising: a variable node decoder configured to calculate variable node density functions ƒ_(V) ⁽¹⁾(i) and ƒ_(V) ⁽²⁾(i) within a first codeword region and a second codeword region, respectively, said variable node density functions ƒ_(V) ⁽¹⁾(i) and ƒ_(V) ⁽²⁾(i) being density functions of output edges of variable nodes with degree i within said first codeword region and said second codeword region, respectively; a check node decoder configured to calculate check node density functions ƒ_(C) ⁽¹⁾(j) and ƒ_(C) ⁽²⁾(j) within said first codeword region and said second codeword region, respectively, said check node density functions ƒ_(C) ⁽¹⁾(j) and ƒ_(C) ⁽²⁾(j) being density functions of output edges of check nodes with degree j within said first codeword region and said second codeword region, respectively; a processor configured to calculate mixture density functions of output check edges connecting variable nodes in said first codeword region and said second codeword region to determine an LDPC code design, wherein, if a signal to noise ratio (SNR) of said first codeword region is different than a signal to noise ratio of said second codeword region, then ƒ_(V) ⁽¹⁾(i)≠ƒ_(V) ⁽²⁾(i) for each i and ƒ_(C) ⁽¹⁾(j)≠ƒ_(C) ⁽²⁾(j) for each j.
 2. The system of claim 1 wherein said variable node decoder is configured to calculate said variable node density functions and said check node decoder is configured to calculate said check node density functions using a probability density function of a symmetric Gaussian distribution.
 3. The system of claim 1 wherein said variable node density function ƒ_(V) ⁽¹⁾(i) is proportional to $\left. {{N\underset{\underset{m_{V}^{(l)}{(i)}}{︸}}{\left( {m_{0}^{(l)} + {\left( {i - 1} \right)m_{C}^{(l)}}} \right.}},{2\left( {m_{0}^{(l)} + {\left( {i - 1} \right)m_{C}^{(l)}}} \right)}} \right) = {N\left( {{m_{V}^{(l)}(i)},{2{m_{V}^{(l)}(i)}}} \right)}$ where I=1, 2, N(u,v) represents the Gaussian distribution with a mean of “u” and a variance of “v”, m₀ represents a first mean value, and m_(c) represents a second mean value.
 4. The system of claim 1 wherein said check node density function ƒ_(C) ⁽¹⁾(j) is proportional to (Nm_(C) ⁽¹⁾(j), 2m_(C) ⁽¹⁾(j)), wherein ${m_{C}^{(1)}(i)} = {\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(1)}{m_{V}^{(1)}(i)}}} \right)} \right\rbrack^{d_{i,1} - 1}\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(2)}{m_{V}^{(2)}(i)}}} \right)} \right\rbrack}^{d_{i,2}} \right)}$ and ψ(x)ΔE{tanh(y/2)} with y˜N(x,2x).
 5. The system of claim 1 wherein said check node density function ƒ_(C) ⁽²⁾(j) is proportional to (Nm_(C) ⁽²⁾(j), 2m_(C) ⁽²⁾(j)), wherein ${m_{C}^{(2)}(i)} = {\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(1)}{m_{v}^{(1)}(i)}}} \right)} \right\rbrack^{d_{i},1}\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(2)}{m_{v}^{(2)}(i)}}} \right)} \right\rbrack}^{d_{i,2} - 1} \right)}$ and ψ(x)ΔE{tanh(y/2)} with y˜N(x,2x).
 6. The system of claim 1 wherein said processor is configured to calculate said mixture density functions of output check edges by determining ${f_{C}^{(l)} = {{\sum\limits_{i}{\rho_{i}{N\left( {{m_{C}^{(l)}({\mathbb{i}})},{2\;{m_{C}^{(l)}({\mathbb{i}})}}} \right)}}} = {N\left( {m_{C}^{(l)},{2\; m_{C}^{(l)}}} \right)}}},{l = {1,2}},$ where {ρ_(i)}_(i) denotes the overall edge distribution of the check nodes.
 7. The system of claim 1 wherein said processor is configured to at least one of determine if a predefined maximum iteration number is reached, perform an initialization step for said density functions, evaluate a code ensemble, and update a code ensemble.
 8. A system for determining a low-density parity check (LDPC) code design for a half-duplex relay channel comprising: means for calculating variable node density functions ƒ_(V) ⁽¹⁾(i) and ƒ_(V) ⁽²⁾(i) within a first codeword region and a second codeword region, respectively, said variable node density functions ƒ_(V) ⁽¹⁾(i) and ƒ_(V) ⁽²⁾(i) being density functions of output edges of variable nodes with degree i within said first codeword region and said second codeword region, respectively; means for calculating check node density functions ƒ_(C) ⁽¹⁾(j) and ƒ_(C) ⁽²⁾(j) within said first codeword region and said second codeword region, respectively, said check node density functions being density functions of output edges of check nodes with degree j within said first codeword region and said second codeword region, respectively; and means for calculating mixture density functions of output check edges connecting variable nodes in said first codeword region and said second codeword region to determine an LDPC code design, wherein, if a signal to noise ratio (SNR) of said first codeword region is different than a signal to noise ratio of said second codeword region, then ƒ_(V) ⁽¹⁾(i)≠ƒ_(V) ⁽²⁾(i) for each i and ƒ_(C) ⁽¹⁾(j)≠ƒ_(C) ⁽²⁾(j) for each j.
 9. The system of claim 8 wherein said means for calculating said variable node density functions and said check node density functions each further comprise means for using a probability density function of a symmetric Gaussian distribution.
 10. The system of claim 8 wherein said variable node density function ƒ_(V) ⁽¹⁾(i) is proportional to ${N\left( {\underset{m_{V}^{(1)}{(i)}}{\underset{︸}{m_{0}^{(l)} + {\left( {{\mathbb{i}} - 1} \right)m_{C}^{(l)}}}},{2\left( {m_{0}^{(l)} + {\left( {{\mathbb{i}} - 1} \right)m_{C}^{(l)}}} \right)}} \right)} = {{N\left( {{m_{V}^{(l)}({\mathbb{i}})},{2\;{m_{V}^{(l)}({\mathbb{i}})}}} \right)}.}$ where I=1, 2, N(u,v) represents the Gaussian distribution with a mean of “u” and a variance of “v”, m₀ represents a first mean value, and m_(c) represents a second mean value.
 11. The system of claim 8 wherein said check node density function ƒ_(C) ⁽¹⁾(j) is proportional to (Nm_(C) ⁽¹⁾(j), 2m_(C) ⁽¹⁾(j)), wherein ${m_{C}^{(1)}({\mathbb{i}})} = {\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(1)}{m_{V}^{(1)}({\mathbb{i}})}}} \right)} \right\rbrack^{d_{i,1} - 1}\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(2)}{m_{V}^{(2)}({\mathbb{i}})}}} \right)} \right\rbrack}^{d_{i,2}} \right)}$ and ψ(x)ΔE{tanh(y/2)} with y˜N(x,2x).
 12. The system of claim 8 wherein said check node density function ƒ_(C) ⁽²⁾(j) is proportional to (Nm_(C) ⁽²⁾(j), 2m_(C) ⁽²⁾(j)), wherein ${m_{C}^{(2)}({\mathbb{i}})} = {\psi^{- 1}\left( {\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(1)}{m_{v}^{(1)}({\mathbb{i}})}}} \right)} \right\rbrack^{d_{i},1}\left\lbrack {\psi\left( {\sum\limits_{j}{\lambda_{j}^{(2)}{m_{v}^{(2)}({\mathbb{i}})}}} \right)} \right\rbrack}^{d_{i,2} - 1} \right)}$ and ψ(x)ΔE{tanh(y/2)} with y˜N(x,2x).
 13. The system of claim 8 wherein said means for calculating said mixture density functions of output check edges further comprises means for determining ${f_{C}^{(l)} = {{\sum\limits_{i}{\rho_{i}{N\left( {{m_{C}^{(l)}({\mathbb{i}})},{2\;{m_{C}^{(l)}({\mathbb{i}})}}} \right)}}} = {N\left( {m_{C}^{(l)},{2\; m_{C}^{(l)}}} \right)}}},{l = {1,2}},$ where {ρ_(i)}_(i) denotes the overall edge distribution of the check nodes.
 14. The system of claim 8 further comprising at least one of means for determining if a predefined maximum iteration number is reached, means for performing an initialization step for said density functions, means for evaluating a code ensemble, and means for updating a code ensemble. 